package com.xkdx.caipiao.wiget;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;

import com.xkdx.caipiao.R;

public class BallView extends TextView {
    /**
     * 球类型，红球
     */
    public static final int BALLTYPE_RED = 1;

    /**
     * 球类型，篮球
     */
    public static final int BALLTYPE_BLUE = 2;

    /**
     * 上下文
     */
    private Context context;

    /**
     * 显示的数字
     */
    private String num;

    /**
     * 可选中，默认为可选中
     */
    private boolean isSelectable = true;

    /**
     * 球的类型
     */
    private int ballType = BALLTYPE_RED;

    /**
     * 事件监听器
     */
    private BallViewSelectedListener ballViewSelectedListener;

    /**
     * 背景图片
     */
    private int background;

    /**
     * 选中后的背景图片
     */
    private int selectedBackgroud;

    /**
     * 球的选中状态
     */
    private boolean isSelected = false;

    /**
     * 字体颜色，默认为红色
     */
    private int ballFontColor = Color.RED;

    /**
     * <p>Discription:构造器方法描述</p>
     * @coustructor 方法.
     */
    public BallView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        TypedArray ta = this.context.getTheme().obtainStyledAttributes(attrs,
        		R.styleable.BallView,0,0);
        try {
            num = ta.getString(R.styleable.BallView_BallView_num);
            isSelectable = ta.getBoolean(R.styleable.BallView_BallView_isSelectable,
                    true);
            
            ballType = ta.getInt(R.styleable.BallView_BallView_ballType, BALLTYPE_RED);
        }
        finally {
            ta.recycle();
        }
        init();
    }

    /**
     * <p>Discription:构造器方法描述</p>
     * @coustructor 方法.
     */
    public BallView(Context context) {
        super(context);
        this.context = context;
        init();
    }

    /**
     * <p>Discription:初始化方法</p>
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    private void init() {
        if (!num.equals("")) {
            //设置显示内容
            this.setText(num);
        }
        else {
            this.setVisibility(View.GONE);
        }

        //文字居中显示
        this.setGravity(Gravity.CENTER);
        //加粗
        this.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
        //初始化球
        initBall();
        //可选中时，设置监听事件
        setOnClickListener();

    }

    /**
     * <p>Title: [球控件被选中事件监听器] </p>
     * <p>Description: [该类概要功能介绍描述]</p>
     * <p>Copyright: Copyright (c) 2013</p>
     * @author <a href="mailto: [847353020@qq.com]">辽东小小</a>
     * @update [修改人] [修改时间]
     * @version $Revision$
     */
    public interface BallViewSelectedListener {
        /**
         * <p>Discription:当球被选中时触发这个事件</p>
         * @param view
         * @author 辽东小小 2013-9-30
         * @update [修改人] [修改时间] [变更描述]
         */
        void OnBallViewSelected(BallView view, boolean isSelected);
    }

    /**
     * <p>Discription:获取球号</p>
     * @return
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    public String getNum() {
        return num;
    }

    /**
     * <p>Discription:设置球上显示的值</p>
     * @param num
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    public void setNum(String num) {
        this.num = num;
        this.setText(num);
        if (!num.equals("")) {
            this.setVisibility(View.VISIBLE);
        }
    }

    /**
     * <p>Discription:球是否可以选中</p>
     * @return
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    public boolean isSelectable() {
        return isSelectable;
    }

    /**
     * <p>Discription:设置球是否可以选中</p>
     * @param isSelectable
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    public void setSelectable(boolean isSelectable) {
        this.isSelectable = isSelectable;
        setOnClickListener();
    }

    /**
     * <p>Discription:获取当前球的类型</p>
     * @return
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    public int getBallType() {
        return ballType;
    }

    /**
     * <p>Discription:设置当前球的类型</p>
     * @param ballType
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    public void setBallType(int ballType) {
        this.ballType = ballType;
        initBall();
    }

    /**
     * <p>Discription:当前球是否被选中</p>
     * @return
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    public boolean isSelected() {
        return isSelected;
    }

    /**
     * <p>Discription:设置是否选中事件监听器</p>
     * @param ballViewSelectedListener
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    public void setBallViewSelectedListener(
            BallViewSelectedListener ballViewSelectedListener) {
        this.ballViewSelectedListener = ballViewSelectedListener;
    }

    /**
     * <p>Discription:初始化球的颜色</p>
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    private void initBall() {
        if (ballType == BALLTYPE_RED) {
            background = R.drawable.ball_gray_caipiao;
            selectedBackgroud = R.drawable.ball_red_clicked_caipiao;
        }
        else {
            background = R.drawable.ball_blue_caipiao;
            selectedBackgroud = R.drawable.ball_blue_clicked_caipiao;
            ballFontColor = Color.BLUE;
        }
        //设置球的背景颜色
        this.setBackgroundResource(background);
        //根据球类型设置字体颜色
        this.setTextColor(ballFontColor);
    }

    /**
     * <p>Discription:设置事件监听</p>
     * @author 辽东小小 2013-9-30
     * @update [修改人] [修改时间] [变更描述]
     */
    private void setOnClickListener() {
        //若可选中，则设置事件监听
        if (isSelectable) {
            this.setClickable(true);
            this.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    isSelected = !isSelected;
                    if (isSelected) {
                        BallView.this.setBackgroundResource(selectedBackgroud);
                        BallView.this.setTextColor(Color.WHITE);
                    }
                    else {
                        BallView.this.setBackgroundResource(background);
                        BallView.this.setTextColor(ballFontColor);
                    }
                    //触发选中事件
                    if (ballViewSelectedListener != null) {
                        ballViewSelectedListener.OnBallViewSelected(
                                BallView.this, isSelected);
                    }
                }
            });

        }//若不可选中，则直接设置为实心的被，白色字体
        else {
            this.setClickable(false);
            this.setBackgroundResource(selectedBackgroud);
            this.setTextColor(Color.WHITE);
        }

    }
}